home *** CD-ROM | disk | FTP | other *** search
/ Power CD-ROM!! 8 / Power CD-ROM 8.iso / prgmming / oldutil / forclean.asm < prev    next >
Assembly Source File  |  1994-12-10  |  3KB  |  153 lines

  1.     Name forclean
  2.     Title
  3.     page    ,132
  4. comment /
  5.  
  6.     This program is a filter that reads a fortran file and
  7.     removes comment lines and numeric labels from the code.
  8.     Used with trunc and find, this can help list all subroutines
  9.  used by a program.
  10.  
  11.     ==>    FIND "CALL" FORTRAN.FOR|FORCLEAN|TRUNC (|SORT|UNIQUE
  12.                     --------
  13. /
  14. ;===================================================================
  15. code    segment    public
  16. ;===================================================================
  17. ;
  18. ;    command line is at 80h of psp - first byte is length
  19. ;
  20.     org    80h
  21. parmsize    db    ?
  22. parm        db    7fh dup (?)
  23. ;
  24. ; .com starts at 100h - but must jump around any data area
  25. ;
  26.     org    100h            ; com file starts here
  27.     assume    cs:code,ds:code,es:code
  28. forclean:
  29.     jmp    clear
  30. ;===================================================================
  31. ;
  32. ; data area for .com programs
  33. ;
  34. inchar      db    ?
  35. count        dw    ?
  36. ;
  37. ;===================================================================
  38. clear:
  39. ;
  40. ; start of actual code is here (clear)
  41. ;
  42.     mov    ah,30h        ; get dos version
  43.     int    21h
  44.     cmp    al,2        ; must be at least 2.0
  45.     jae    xxxx
  46.     jmp    oops
  47. ;
  48. ; release uneeded memory
  49. ;
  50. xxxx:
  51.     mov    bx,offset bos[256]    ; 256 byte local stack
  52.     mov    sp,bx
  53.     mov    cx,4
  54.     sar    bx,cl
  55.     inc    bx        ; paragraphs needed = end/16 + 1
  56.     mov    ah,4ah        ; SETBLOCK
  57.     int    21h
  58. ;
  59. ; Read a character.  If it is 'C' skip the line.  If numeric, convert
  60. ; to space.
  61. ;
  62. ; These two i/o parameters are constants.
  63. ;
  64. parmok:
  65.     mov    dx,offset inchar
  66.     mov    cx,1h        ; get 1 character
  67.     mov    count,0h     ; position of character in line
  68. again:
  69. ;
  70. ; read a character
  71. ;
  72.     xor    bx,bx        ; zero is handle of standard input
  73.     mov    ah,3fh        ; read a file/device function
  74.     int    21h        ; invoke the function
  75. ;
  76. ; if carry set of ax=0 exit
  77. ;
  78.     jc    oops        ; i/o error
  79.     and    ax,ax        ; set flags
  80.     jz    oops        ; eof
  81. ;
  82.     inc    count        ; character position in line
  83. ;
  84. ; compare character against parmline.
  85. ;
  86.     cmp    count,1h    ; if 1, test for '$' and 'C'
  87.     jne    notfirst
  88. ;
  89. ; if C or $ skip the whole line. (It's a comment or metacommand.)
  90. ;
  91. ; If TAB, add 7 to count.
  92. ;
  93.     cmp    inchar,09h    ; tab character?
  94.     jne    testc
  95.     add    count,07h    ; adjust for tab
  96.     jmp    notfirst
  97. testc:
  98.     cmp    inchar,'C'
  99.     je    skip
  100.     cmp    inchar,'$'
  101.     je    skip
  102. ;
  103. ; If character is '0'-'9' and count <6 convert to space.
  104. ;
  105. notfirst:
  106.     cmp    count,6h    ; test for position
  107.     jge    output        ; don't test at all if count >=6.
  108.     cmp    inchar,'0'    ; if '0' >= inchar >= '9' convert it.
  109.     jl    output
  110.     cmp    inchar,'9'
  111.     jg    output
  112.     mov    inchar,' '    ; convert to space
  113.     jmp    output        ; output the character
  114. ;
  115. ; First character was C or $ - skip the rest of the line.
  116. ;
  117. skip:
  118.     xor    bx,bx        ; zero is handle of standard input
  119.     mov    cx,1h        ; get 1 character
  120.     mov    ah,3fh        ; read a file/device function
  121.     int    21h        ; invoke the function
  122. ;
  123. ; if carry set of ax=0 exit
  124. ;
  125.     jc    oops        ; i/o error
  126.     and    ax,ax        ; set flags
  127.     jz    oops        ; eof
  128. ;
  129. ; look for <lf>
  130. ;
  131.     cmp    inchar,0Ah    ; if inchar is <LF>, start i/o again.
  132.     jne    skip        ; otherwise skip it.
  133.     mov    count,0h
  134.     jmp    again
  135. output:
  136.     mov    bx,1h        ; standard output handle
  137.     mov    ah,40h        ; dx still points at inchar
  138.     int    21h        ; call dos output function
  139. ;
  140. ; if character just output was a <lf>, re-init the position counter
  141. ;
  142.     cmp    inchar,0Ah
  143.     jne    again
  144.     mov    count,0h
  145.     jmp    again        ; repeat cycle
  146. oops:
  147.     int    20h        ; return to dos
  148.  
  149. bos    label    near        ; bottom of stack
  150.  
  151. code    ends
  152.     end    forclean
  153.